package core.domain.query.expgen;

import java.util.List;
import java.util.Map;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Expression;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Selection;

public interface IJpaSearchExpGenerator {
	// SELECT
	public List<Selection<?>> getSelectField(CriteriaBuilder cb, Root<?> root);
	// DISTINCT
	public Boolean getDistinctable();
	// FROM
	public Root<?> getRoot();
	// WHERE
	public List<Predicate> getPredicates();
	// GROUP BY
	public List<Expression<?>> getGroupBy(CriteriaBuilder cb);
	// ORDER BY
	public List<Order> getOrderBy(CriteriaBuilder builder);
	// HAVING
	public List<Predicate> having(CriteriaBuilder cb);
	
	public abstract Map<String, Object> getQueryHints();
	
}
